package com.stx.jeepay.core.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.stx.jeepay.core.entity.PayOrderEntity;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 支付订单表
 *
 * @author suntingxing
 * @email 1@gmail.com
 * @date 2023-09-11 13:05:22
 */
public interface PayOrderService extends IService<PayOrderEntity> {

    /**
     * 首页支付周统计
     *
     * @param mchNo
     * @return
     */
    JSONObject mainPageWeekCount(String mchNo);

    /**
     * 首页统计总数量
     *
     * @param mchNo
     * @return
     */
    JSONObject mainPageNumCount(String mchNo);

    /**
     * 首页支付统计
     *
     * @param mchNo
     * @param createdStart
     * @param createdEnd
     * @return
     */
    List<Map> mainPagePayCount(String mchNo, String createdStart, String createdEnd);

    /**
     * 首页支付类型统计
     *
     * @param mchNo
     * @param createdStart
     * @param createdEnd
     * @return
     */
    ArrayList mainPagePayTypeCount(String mchNo, String createdStart, String createdEnd);

    /**
     * 更新订单状态  【订单生成】 --》 【支付中】
     **/
    boolean updateInit2Ing(String payOrderId, PayOrderEntity payOrder);

    /** 更新订单状态  【支付中】 --》 【支付成功/支付失败】 **/
    boolean updateIng2SuccessOrFail(String payOrderId, Byte updateState, String channelOrderNo, String channelUserId, String channelErrCode, String channelErrMsg);

    /** 更新订单 通知状态 --> 已发送 **/
    int updateNotifySent(String orderId);

    /** 更新订单状态  【支付中】 --》 【支付成功】 **/
    boolean updateIng2Success(String payOrderId, String channelOrderNo, String channelUserId);

    boolean updateIng2Fail(String payOrderId, String channelOrderNo, String channelUserId, String channelErrCode, String channelErrMsg);

    /**
     *  计算支付订单商家入账金额
     * 商家订单入账金额 （支付金额 - 手续费 - 退款金额 - 总分账金额）
     */
    Long calMchIncomeAmount(PayOrderEntity dbPayOrder);

    /** 查询商户订单 **/
    PayOrderEntity queryMchOrder(String mchNo, String payOrderId, String mchOrderNo);

    /** 更新订单状态  【订单生成】 --》 【订单关闭】 **/
    boolean updateInit2Close(String payOrderId);

    /** 更新订单状态  【支付中】 --》 【订单关闭】 **/
    boolean updateIng2Close(String payOrderId);

    /** 更新订单为 超时状态 **/
    int updateOrderExpired();

    /**
     * 通用列表查询条件
     */
    IPage<PayOrderEntity> listByPage(IPage iPage, PayOrderEntity payOrder, JSONObject paramJSON, LambdaQueryWrapper<PayOrderEntity> queryWrapper);
}

